package br.com.sgmf.web.managedbean;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import br.com.sgmf.dao.FornecedorDAO;
import br.com.sgmf.model.Endereco;
import br.com.sgmf.model.Estado;
import br.com.sgmf.model.Fornecedor;

@Component
@ManagedBean
@SessionScoped
public class FornecedorBean {

	private Fornecedor fornecedor;
	private Endereco endereco;
	private List<Fornecedor> fornecedores;

	@Autowired
	private FornecedorDAO fornecedorDAO;

	@PostConstruct
	public void init() {
		fornecedor = new Fornecedor();
		endereco = new Endereco();
		fornecedores = new ArrayList<Fornecedor>();
	}

	public String salvar() {
		FacesMessage message;

		fornecedor.setEndereco(endereco);

		if (fornecedor.getId() == null) {
			fornecedorDAO.save(fornecedor);
			message = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Fornecedor cadastrado com sucesso!", null);
		} else {
			fornecedorDAO.update(fornecedor);
			message = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Fornecedor editado com sucesso!", null);
		}

		fornecedor = new Fornecedor();
		endereco = new Endereco();

		FacesContext context = FacesContext.getCurrentInstance();
		context.addMessage(null, message);

		return null;
	}

	public String editar(Fornecedor fornecedor) {
		this.fornecedor = fornecedor;
		this.endereco = fornecedor.getEndereco();
		return null;
	}

	public String excluir(Fornecedor fornecedor) {
		fornecedorDAO.delete(fornecedor);

		fornecedor = new Fornecedor();

		FacesContext context = FacesContext.getCurrentInstance();
		FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,
				"Fornecedor excluído com sucesso!", null);
		context.addMessage(null, message);

		return null;
	}

	public Estado[] getEstados() {
		return Estado.values();
	}

	public Fornecedor getFornecedor() {
		return fornecedor;
	}

	public void setFornecedor(Fornecedor fornecedor) {
		this.fornecedor = fornecedor;
	}

	public Endereco getEndereco() {
		return endereco;
	}

	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	public List<Fornecedor> getFornecedores() {
		return fornecedorDAO.findAll();
	}

	public void setFornecedores(List<Fornecedor> fornecedores) {
		this.fornecedores = fornecedores;
	}

}
